package com.yicheng.statistics.common

import java.util.Date

import com.yicheng.statistics.repo.model.Annotation.{DeserValueDouble, DeserValueInt}

/**
  * created by WangQian on 15/12/20.
  */
object RTAModel {

  /**
    * 车辆信息
    *
    * @param id                    车辆Id
    * @param registrationNO        车牌号
    * @param alais                 别名
    * @param workUnitID            机构ID
    * @param registrationNOKindID  车牌类型
    * @param registrationNOColorID 车辆颜色
    * @param colorID               车牌颜色
    * @param usageID               用途
    * @param bandID                品牌
    * @param manufactoryID         厂商
    * @param vin                   VIN号
    * @param weight                重量
    * @param loadingCapacity       核定吨位
    * @param seatCount             核定座位
    * @param regAddress            注册地
    * @param areaID                所属区域
    * @param transportPermits      道路运输证号
    * @param businessScope         经营区域
    * @param licenseNo             经营许可证号
    * @param vehicleTypeId         载运类型
    * @param supplier              供应商(可选项)
    * @param brandCode             品牌(可选项)
    * @param carModel              车辆型号(可选项)
    * @param buyDate               购买日期
    * @param originalPrice         原值（单位：万元）
    * @param yearDepreciation      折旧年限（单位：年）
    * @param remnantRate           残值率,0~1之间
    * @param loadWeight            载重(可选项)
    * @param batteryBatch          电池批次（可选项）
    * @param batteryModel          电池型号(可选项)
    * @param carFrame              车架号(可选项)
    * @param batchSN               电池SN号
    * @param batteryBox            电池箱编号(可选项）
    * @param headPhoto             车头照片路径
    * @param vehicleType           车辆类型（默认为：1），1-运营车辆；2-补电车辆
    * @param tboxID                Pub_TBox主键，用于绑定T-BOX
    * @param rearviewMirrorID      pub_rearview_mirror表的主键
    * @param businessSafeDate      商业保险购买日期
    * @param trafficForceSafeDate  交强险购买日期
    * @param vehicleShipTaxDate    车船税购买日期
    * @param provinceID            省域ID采用GB/T2260中规定的行政区划代码六位中前两位，缺省或不存在时为0
    * @param cityID                市县域ID。市县域ID采用GB/T2260中规定的行政区划代码六位中后四位，缺省或不存在时为0
    * @param powerType             动力类型 1:电动车 2:混合动力车 3:燃料电池车
    * @param batteryType           储能装置种类。1：锂电池；2：超级电容。
    * @param driveType             驱动电机类型。1：直流电机；2：异步电机；3：同步电机；4：开关磁阻
    * @param drivePower            驱动电机额定功率。单位：KW，范围：0～255
    * @param driveRotate           驱动电机额定转速。单位：转/分钟，范围：0～65534
    * @param driveTorque           驱动电机额定转矩。单位：N.m，范围：0～65534
    * @param driveNum              驱动电机安装数量。单位：KW，范围：1～254
    * @param driveLayout           驱动电机布置型式/位置。1：前置横式；2：前置纵式；3：后置横式；4：后置纵式；5：中置横式；6：中置纵式
    * @param driveCooling          驱动电机冷却方式。1：液冷；2：风冷
    * @param maxMileage            电动汽车续驶里程。单位：KM，范围：0～65534
    * @param maxSpeed              电动汽车最高车速。单位：KM/小时，范围：0～254
    * @param memo                  备注
    * @param isEnable              可用标志,默认为：0
    * @param isDeleted             删除标志,默认为：0
    * @param createDatetime        创建时间
    * @param createUserID          创建人
    * @param modifyDatetime        修改时间
    * @param modifyUserID          修改人
    */
  case class Vehicle(
                      id: Long, //车辆Id
                      registrationNO: Option[String], //车牌号
                      alais: Option[String], //别名
                      workUnitID: Option[Long], //机构ID
                      registrationNOKindID: Option[Int], //车牌类型
                      registrationNOColorID: Option[Int], //车辆颜色
                      colorID: Option[Int], //车牌颜色
                      usageID: Option[Int], //用途
                      bandID: Option[Int], //品牌
                      manufactoryID: Option[Int], //厂商
                      vin: Option[String], //VIN号
                      weight: Double, //重量
                      loadingCapacity: Double, //核定吨位
                      seatCount: Option[Int], //核定座位
                      regAddress: Option[String], //注册地
                      areaID: Option[Int], //所属区域
                      transportPermits: Option[String], //道路运输证号
                      businessScope: Option[String], //经营区域
                      licenseNo: Option[String], //经营许可证号
                      vehicleTypeId: Option[Int], //载运类型
                      supplier: Option[String], //供应商(可选项)
                      brandCode: Option[String], //品牌(可选项)
                      carModel: Option[String], //车辆型号(可选项)
                      buyDate: Long, //购买日期
                      originalPrice: Float, //原值（单位：万元）
                      yearDepreciation: Float, //折旧年限（单位：年）
                      remnantRate: Float, //残值率,0~1之间
                      loadWeight: Option[String], //载重(可选项)
                      batteryBatch: Option[String], //电池批次（可选项）
                      batteryModel: Option[String], //电池型号(可选项)
                      carFrame: Option[String], //车架号(可选项)
                      batchSN: Option[String], //电池SN号
                      batteryBox: Option[String], //电池箱编号(可选项）
                      headPhoto: Option[String], //车头照片路径
                      vehicleType: Option[Int], //车辆类型（默认为：1），1-运营车辆；2-补电车辆
                      tboxID: Option[Long], //Pub_TBox主键，用于绑定T-BOX
                      rearviewMirrorID: Option[Long], //pub_rearview_mirror表的主键
                      businessSafeDate: Long, //商业保险购买日期
                      trafficForceSafeDate: Long, //交强险购买日期
                      vehicleShipTaxDate: Long, //车船税购买日期
                      provinceID: Option[Int], //省域ID采用GB/T2260中规定的行政区划代码六位中前两位，缺省或不存在时为0
                      cityID: Option[Int], //市县域ID。市县域ID采用GB/T2260中规定的行政区划代码六位中后四位，缺省或不存在时为0
                      powerType: Option[Int], //动力类型 1:电动车 2:混合动力车 3:燃料电池车
                      batteryType: Option[Int], //储能装置种类。1：锂电池；2：超级电容。
                      driveType: Option[Int], //驱动电机类型。1：直流电机；2：异步电机；3：同步电机；4：开关磁阻
                      drivePower: Option[Int], //驱动电机额定功率。单位：KW，范围：0～255
                      driveRotate: Option[Int], //驱动电机额定转速。单位：转/分钟，范围：0～65534
                      driveTorque: Option[Int], //驱动电机额定转矩。单位：N.m，范围：0～65534
                      driveNum: Option[Int], //驱动电机安装数量。单位：KW，范围：1～254
                      driveLayout: Option[Int], //驱动电机布置型式/位置。1：前置横式；2：前置纵式；3：后置横式；4：后置纵式；5：中置横式；6：中置纵式
                      driveCooling: Option[Int], //驱动电机冷却方式。1：液冷；2：风冷
                      maxMileage: Option[Int], //电动汽车续驶里程。单位：KM，范围：0～65534
                      maxSpeed: Option[Int], //电动汽车最高车速。单位：KM/小时，范围：0～254
                      memo: Option[String], //备注
                      isEnable: Int, //可用标志,默认为：0
                      isDeleted: Int, //删除标志,默认为：0
                      createDatetime: Long, //创建时间
                      createUserID: Option[Long], //创建人
                      modifyDatetime: Long, //修改时间
                      modifyUserID: Option[Long] //修改人
                    )

  /**
    * TBox信息
    *
    * @param id             主键Id
    * @param deviceID       设备唯一id
    * @param deviceType     1:电动车 2:混合动力车 3:燃料电池车 4:充电桩 5:移动充电桩
    * @param orkUnitID      机构
    * @param factory        设备厂商
    * @param batchNo        设备批号
    * @param serial         10位的标示字符串
    * @param IMEI           IMEI
    * @param model          T-Box型号（可选项）
    * @param hardVersion    硬件版本号（可选项）
    * @param softVersion    软件版本号（可选项）
    * @param status         状态（默认为:1），1-正常，0-删除
    * @param simID          Sim卡ID（pub_simcard的主键）
    * @param commNO         通信号
    * @param useFlag        使用标志（默认为：0）
    * @param isBindL        绑定状态，1=已绑定，0=未绑定
    * @param createTime     创建时间
    * @param createUserID   创建人
    * @param lastModifyTime 最后修改时间
    * @param lastModifierID 最后修改人
    */
  case class TBox(
                   id: Long, //主键Id
                   deviceID: String, //设备唯一id
                   deviceType: Int, //1:电动车 2:混合动力车 3:燃料电池车 4:充电桩 5:移动充电桩
                   orkUnitID: Long, //机构
                   factory: String, //设备厂商
                   batchNo: String, //设备批号
                   serial: String, //10位的标示字符串
                   IMEI: Option[String], //IMEI
                   model: Option[String], //T-Box型号（可选项）
                   hardVersion: Option[String], //硬件版本号（可选项）
                   softVersion: Option[String], //软件版本号（可选项）
                   status: Int, //状态（默认为:1），1-正常，0-删除
                   simID: Option[Long], //Sim卡ID（pub_simcard的主键）
                   commNO: Option[String], //通信号
                   useFlag: Int, //使用标志（默认为：0）
                   isBindL: Int, //绑定状态，1=已绑定，0=未绑定
                   createTime: Long, //创建时间
                   createUserID: Option[Long], //创建人
                   lastModifyTime: Long, //最后修改时间
                   lastModifierID: Option[Long] //最后修改人
                 )

  /**
    * 后视镜信息
    *
    * @param id             主键Id
    * @param deviceID       设备ID
    * @param IMEI           IMEI
    * @param model          型号（可选项）
    * @param hardVersion    硬件版本号
    * @param softVersion    软件版本号
    * @param sameraModel    摄像头类型（可选项）
    * @param simID          Sim卡ID（pub_simcard的主键）
    * @param status         状态（默认为：1），1-正常，0-删除
    * @param workUnitID     机构
    * @param factory        设备厂商
    * @param isBind         是否绑定
    * @param isDeleted      是否删除
    * @param createTime     创建时间
    * @param createUserID   创建人
    * @param lastModifyTime 最后修改时间
    * @param lastModifierID 最后修改人
    */
  case class RearviewMirror(
                             id: Long, //主键Id
                             deviceID: Option[Long], //设备ID
                             IMEI: Option[Long], //IMEI
                             model: Option[String], //型号（可选项）
                             hardVersion: Option[String], //硬件版本号
                             softVersion: Option[String], //软件版本号
                             sameraModel: Option[String], //摄像头类型（可选项）
                             simID: Option[Long], //Sim卡ID（pub_simcard的主键）
                             status: Int, //状态（默认为：1），1-正常，0-删除
                             workUnitID: Option[Long], //机构
                             factory: Option[String], //设备厂商
                             isBind: Int, //是否绑定
                             isDeleted: Int, //是否删除
                             createTime: Long, //创建时间
                             createUserID: Option[Long], //创建人
                             lastModifyTime: Long, //最后修改时间
                             lastModifierID: Option[Long] //最后修改人
                           )

  /**
    * SIM卡信息
    *
    * @param id            主键Id
    * @param IMSI          IMSI
    * @param code          卡编号
    * @param phoneNO       手机号
    * @param SIMChargeID   消费套餐(元)
    * @param effectiveDate 开通日期
    * @param buyDate       购买日期
    * @param operationID   所属运营商
    * @param address       开卡所属地
    * @param soundKind     开通语音类别
    * @param isNote        是否开通短信(默认为：0)
    * @param noteCount     短信包月条数
    * @param prepaySum     预交费用金额(元)
    * @param endDate       预交费用到期时间
    * @param overSpend     超出流量收费情况(元)
    * @param APN           APN
    * @param IP            IP
    * @param isTwoCities   是否粤港两地卡(默认为：0)
    * @param workUnitID    所属企业
    * @param flux          流量套餐(元)
    * @param useType       使用类型 1:后视镜  2:T-Box
    * @param isInUse       是否使用(默认为：1)
    */
  case class SIMCard(
                      id: Long, //主键Id
                      IMSI: Option[String], //IMSI
                      code: Option[String], //卡编号
                      phoneNO: Option[String], //手机号
                      SIMChargeID: Option[Int], //消费套餐(元)
                      effectiveDate: Option[Long], //开通日期
                      buyDate: Option[Long], //购买日期
                      operationID: Option[Long], //所属运营商
                      address: Option[String], //开卡所属地
                      soundKind: Option[Int], //开通语音类别
                      isNote: Option[Long], //是否开通短信(默认为：0)
                      noteCount: Option[String], //短信包月条数
                      prepaySum: Option[Double], //预交费用金额(元)
                      endDate: Option[Long], //预交费用到期时间
                      overSpend: Option[Double], //超出流量收费情况(元)
                      APN: Option[String], //APN
                      IP: Option[String], //IP
                      isTwoCities: Option[Int], //是否粤港两地卡(默认为：0)
                      workUnitID: Option[Long], //所属企业
                      flux: Option[Double], //流量套餐(元)
                      useType: Option[Int], //使用类型 1:后视镜  2:T-Box
                      isInUse: Int //是否使用(默认为：1)
                    )

  /**
    * 分析组信息
    *
    * @param id                主键Id
    * @param unitID            单位ID
    * @param userID            用户ID
    * @param analyseGroupsName 分析组名称
    * @param analyseID         分析器ID，对应bi_analyse_info的主键
    */
  case class AnalyseGroup(
                           id: Long, //主键Id
                           unitID: Long, //单位ID
                           userID: Long, //用户ID
                           analyseGroupsName: Option[String], //分析组名称
                           analyseID: Option[Int], //分析器ID，对应bi_analyse_info的主键
                           alarmTypeID: Int//报警类型编码
                         )

  /**
    * 分析组与车辆关系
    *
    * @param id              主键Id
    * @param analyseGroupsID 分析组Id
    * @param vehicleID       车辆ID
    */
  case class AnalyseGroupVehicle(
                                  id: Long, //主键Id
                                  analyseGroupsID: Option[Long], //分析组Id
                                  vehicleID: Long //车辆ID
                                )

  /**
    * 超速报警分析设置
    *
    * @param id                    主键Id
    * @param analyseGroupsID       分析组ID
    * @param remindType            提醒方式，2：平台报警；3：TTS语音报警;；4：平台/TTS语音报警
    * @param remindInterval        提醒间隔
    * @param commandContent        提醒内容
    * @param analysePeriod         分析周期
    * @param periodValue           周期值
    * @param startTime             分析开始时间,格式如:8:00:00
    * @param endTime               分析结束时间，格式如：23:00:00
    * @param speedThreshold        日间速度门限,速度阀值
    * @param timeThreshold         时间阀值
    * @param analyseType           分析类型,1:高速,2:低速
    * @param name                  名称
    * @param earlyCmdContent       预警播报内容
    * @param nightDriveBeginTime   夜间行车开始时间,格式如:20:00
    * @param nightDriveendTime     夜间行车结束时间,格式如:05:00
    * @param nightSpeedPercent     夜间速度门限,夜间行车速度门限为白天速度门限的百分比,如:80%
    * @param earlyWarningThreshold 预超/低速提前量,预警速度值=速度门限值-预超/低速提前量
    * @param createUserID          创建人
    * @param createUnitID          创建单位
    * @param createDatetime        创建时间
    */
  case class VehicleSpeedSetting(
                                  id: Long, //主键Id
                                  analyseGroupsID: Long, //分析组ID
                                  remindType: Int, //提醒方式，2：平台报警；3：TTS语音报警;；4：平台/TTS语音报警
                                  remindInterval: Int, //提醒间隔
                                  commandContent: String, //提醒内容
                                  analysePeriod: Int, //分析周期
                                  periodValue: Option[String], //周期值
                                  startTime: String, //分析开始时间,格式如:8:00:00
                                  endTime: String, //分析结束时间，格式如：23:00:00
                                  speedThreshold: Int, //日间速度门限,速度阀值
                                  timeThreshold: Int, //时间阀值
                                  analyseType: Int, //分析类型,1:高速,2:低速
                                  name: Option[String], //名称
                                  earlyCmdContent: Option[String], //预警播报内容
                                  nightDriveBeginTime: Option[String], //夜间行车开始时间,格式如:20:00
                                  nightDriveendTime: Option[String], //夜间行车结束时间,格式如:05:00
                                  nightSpeedPercent: Option[Int], //夜间速度门限,夜间行车速度门限为白天速度门限的百分比,如:80%
                                  earlyWarningThreshold: Option[Int], //预超/低速提前量,预警速度值=速度门限值-预超/低速提前量
                                  createUserID: Option[Long], //创建人
                                  createUnitID: Option[Long], //创建单位
                                  createDatetime: Option[Long], //创建时间
                                  var alarmMobile: Option[String], //报警电话
                                  openAlarmMobile: Int
                                ){
    if (openAlarmMobile == 0 && alarmMobile.nonEmpty)
      alarmMobile = None
  }

  /**
    * 怠速报警条件设置
    *
    * @param id              主键Id
    * @param name            名称
    * @param analyseGroupsID 车辆分析组
    * @param remindType      提醒方式
    * @param remindInterval  提醒间隔
    * @param commandContent  提醒内容
    * @param analysePeriod   分析周期
    * @param periodValue     周期值
    * @param startTime       开始时间
    * @param endTime         结束时间
    * @param timeThreshold   单次怠速时长
    * @param speedThreshold  怠速速度阀值
    * @param alarmMobile     报警接收号码
    * @param createUserID    创建人
    * @param createDatetime  创建时间
    * @param createUnitID    创建单位
    */
  case class VehicleIdlingSetting(
                                   id: Long, //主键Id
                                   name: Option[String], //名称
                                   analyseGroupsID: Long, //车辆分析组
                                   remindType: Int, //提醒方式
                                   remindInterval: Int, //提醒间隔
                                   commandContent: String, //提醒内容
                                   analysePeriod: Int, //分析周期
                                   periodValue: Option[String], //周期值
                                   startTime: String, //开始时间
                                   endTime: String, //结束时间
                                   timeThreshold: Int, //单次怠速时长
                                   speedThreshold: Int, //怠速速度阀值
                                   alarmMobile: Option[String], //报警接收号码
                                   createUserID: Option[Long], //创建人
                                   createDatetime: Option[Long], //创建时间
                                   createUnitID: Option[Long] //创建单位
                                 )

  /**
    * 时间栅栏报警设置
    *
    * @param id              主键Id
    * @param name            名称
    * @param analyseGroupsID 分析组
    * @param remindType      提醒方式
    * @param remindInterval  提醒时间间隔
    * @param commandContent  提醒内容
    * @param analysePeriod   分析周期
    * @param periodValue     分析值
    * @param startTime       开始时间
    * @param endTime         结束时间
    * @param timeThreshold   时间阀值
    * @param alarmMobile     报警接收手机号码
    * @param createUserID    创建人
    * @param createDatetime  创建时间
    * @param createUnitID    创建单位
    */
  case class VehicleFenceSetting(
                                  id: Long, //主键Id
                                  name: Option[String], //名称
                                  analyseGroupsID: Long, //分析组
                                  remindType: Int, //提醒方式
                                  remindInterval: Int, //提醒时间间隔
                                  commandContent: String, //提醒内容
                                  analysePeriod: Int, //分析周期
                                  periodValue: Option[String], //分析值
                                  startTime: String, //开始时间
                                  endTime: String, //结束时间
                                  timeThreshold: Int, //时间阀值
                                  alarmMobile: Option[String], //报警接收手机号码
                                  createUserID: Option[Long], //创建人
                                  createDatetime: Option[Long], //创建时间
                                  createUnitID: Option[Long] //创建单位
                                )

  /**
    * 电池电量低报警设置
    *
    * @param id               主键Id
    * @param name             名称
    * @param analyseGroupsID  车辆分析组
    * @param remindType       提醒方式
    * @param remindInterval   提醒间隔
    * @param commandContent   提醒内容
    * @param analysePeriod    分析周期类型
    * @param periodValue      周期值
    * @param startTime        开始时间
    * @param endTime          结束时间
    * @param batteryThreshold 电量阀值，1~100
    * @param alarmMobile      电池报警接收手机号
    * @param createUserID     创建人
    * @param createDatetime   创建时间
    * @param createUnitID     创建单位
    */
  case class VehicleBatteryLowSetting(
                                       id: Long, //主键Id
                                       name: Option[String], //名称
                                       analyseGroupsID: Long, //车辆分析组
                                       remindType: Int, //提醒方式
                                       remindInterval: Int, //提醒间隔
                                       commandContent: String, //提醒内容
                                       analysePeriod: Int, //分析周期类型
                                       periodValue: Option[String], //周期值
                                       startTime: String, //开始时间
                                       endTime: String, //结束时间
                                       batteryThreshold: Option[Int], //电量阀值，1~100
                                       var alarmMobile: Option[String], //电池报警接收手机号
                                       createUserID: Option[Long], //创建人
                                       createDatetime: Option[Long], //创建时间
                                       createUnitID: Option[Long], //创建单位
                                       openAlarmMobile: Int
                                     ){
    if (openAlarmMobile == 0 && alarmMobile.nonEmpty)
      alarmMobile = None
  }

  /*
  /**
    * 车辆电池报警设置
    * @param id 主键Id
    * @param name 名称
    * @param analyseGroupsID 分析组
    * @param remindType 提醒方式,平台、终端、平台和终端
    * @param remindInterval 提醒间隔
    * @param commandContent 提醒内容
    * @param analysePeriod 分析周期类型
    * @param periodValue 周期值
    * @param startTime 开始时间
    * @param endTime 结束时间
    * @param coverageGroupsID 分析地点
    * @param coverageRange 地点范围
    * @param timeThreshold 地点时间阀值
    * @param analyseType 分析类型
    * @param yc 压差报警条件，bi_set_vehicle_battery_param表的主键
    * @param dycy 电压差异报警条件,bi_set_vehicle_battery_param表的主键
    * @param dtgy 单体过压报警条件,bi_set_vehicle_battery_param表的主键
    * @param dtqy 单体欠压报警条件,bi_set_vehicle_battery_param表的主键
    * @param wc 温差报警条件,bi_set_vehicle_battery_param表的主键
    * @param wdcg 温度过高报警条件,bi_set_vehicle_battery_param表的主键
    * @param egxyc 温感线异常报警,bi_set_vehicle_battery_param表的主键
    * @param jygd 绝缘过低报警,bi_set_vehicle_battery_param表的主键
    * @param cgfd 充高放低报警,bi_set_vehicle_battery_param表的主键
    * @param socgd SOC过低报警,bi_set_vehicle_battery_param表的主键
    * @param alarmMobile 电池报警接收手机号
    * @param createUserID 创建用户
    * @param createDatetime 创建时间
    * @param createUnitID 所属单位
    */
  case class VehicleBatterySetting(
                                  id:Long,//主键Id
                                  name:Option[String], //名称
                                  analyseGroupsID:Long, //分析组
                                  remindType:Int, //提醒方式,平台、终端、平台和终端
                                  remindInterval:Int, //提醒间隔
                                  commandContent:String, //提醒内容
                                  analysePeriod:Int, //分析周期类型
                                  periodValue:Option[String], //周期值
                                  startTime:String, //开始时间
                                  endTime:String, //结束时间
                                  coverageGroupsID:Long,//分析地点
                                  coverageRange:Int,//地点范围
                                  timeThreshold:Int,//地点时间阀值
                                  analyseType:Int,//分析类型
                                  yc:Option[Long], //压差报警条件，bi_set_vehicle_battery_param表的主键
                                  dycy:Option[Long], //电压差异报警条件,bi_set_vehicle_battery_param表的主键
                                  dtgy:Option[Long], //单体过压报警条件,bi_set_vehicle_battery_param表的主键
                                  dtqy:Option[Long], //单体欠压报警条件,bi_set_vehicle_battery_param表的主键
                                  wc:Option[Long], //温差报警条件,bi_set_vehicle_battery_param表的主键
                                  wdcg:Option[Long], //温度过高报警条件,bi_set_vehicle_battery_param表的主键
                                  egxyc:Option[Long], //温感线异常报警,bi_set_vehicle_battery_param表的主键
                                  jygd:Option[Long], //绝缘过低报警,bi_set_vehicle_battery_param表的主键
                                  cgfd:Option[Long], //充高放低报警,bi_set_vehicle_battery_param表的主键
                                  socgd:Option[Long], //SOC过低报警,bi_set_vehicle_battery_param表的主键
                                  alarmMobile:Option[String], //电池报警接收手机号
                                  createUserID:Option[Long], //创建用户
                                  createDatetime:Option[Long], //创建时间
                                  createUnitID:Option[Long] //所属单位
                                )

  /**
    * 车辆电池报警条件参数表
    * @param id 主键Id
    * @param alarmType 报警类型
    * @param level1Lower 一级报警下限值，空值表示无下限
    * @param level1Upper 一级报警上限值，空值表示无下限
    * @param level2Lower 二级报警下限值，空值表示无下限
    * @param level2Upper 二级报警上限值，空值表示无下限
    * @param level3Lower 三级报警下限值，空值表示无下限
    * @param level3Upper 三级报警上限值，空值表示无下限
    * @param level4Lower 四级报警下限值，空值表示无下限
    * @param level4Upper 四级报警上限值，空值表示无下限
    * @param level5Lower 五级报警下限值，空值表示无下限
    * @param level5Upper 五级报警上限值，空值表示无下限
    * @param level6Lower 六级报警下限值，空值表示无下限
    * @param level6Upper 六级报警上限值，空值表示无下限
    * @param unit 单位
    */
  case class VehicleBatteryParamSetting(
                                  id:Long,//主键Id
                                  alarmType:Option[Int], //报警类型
                                  level1Lower:Option[Int], //一级报警下限值，空值表示无下限
                                  level1Upper:Option[Int], //一级报警上限值，空值表示无上限
                                  level2Lower:Option[Int], //二级报警下限值，空值表示无下限
                                  level2Upper:Option[Int], //二级报警上限值，空值表示无上限
                                  level3Lower:Option[Int], //三级报警下限值，空值表示无下限
                                  level3Upper:Option[Int], //三级报警上限值，空值表示无上限
                                  level4Lower:Option[Int], //四级报警下限值，空值表示无下限
                                  level4Upper:Option[Int], //四级报警上限值，空值表示无上限
                                  level5Lower:Option[Int], //五级报警下限值，空值表示无下限
                                  level5Upper:Option[Int], //五级报警上限值，空值表示无上限
                                  level6Lower:Option[Int], //六级报警下限值，空值表示无下限
                                  level6Upper:Option[Int], //六级报警上限值，空值表示无上限
                                  unit:Option[String] //单位
                                )
  */

  /** 车辆电池压差报警设置
    *
    * @param id              主键Id
    * @param analyseGroupsID 分析组
    * @param remindType      提醒方式,平台、终端、平台和终端
    * @param remindInterval  提醒间隔
    * @param commandContent  提醒内容
    * @param analysePeriod   分析周期类型
    * @param periodValue     周期值
    * @param startTime       开始时间
    * @param endTime         结束时间
    * @param createUserID    创建用户
    * @param createDatetime  创建时间
    * @param createUnitID    所属单位
    * @param name            名称
    * @param alarmMobile     电池报警接收手机号
    * @param level1Lower     一级报警下限值，空值表示无下限
    * @param level1Upper     一级报警上限值，空值表示无上限
    * @param level2Lower     二级报警下限值，空值表示无下限
    * @param level2Upper     二级报警上限值，空值表示无上限
    * @param level3Lower     三级报警下限值，空值表示无下限
    * @param level3Upper     三级报警上限值，空值表示无上限
    * @param level4Lower     四级报警下限值，空值表示无下限
    * @param level4Upper     四级报警上限值，空值表示无上限
    * @param level5Lower     五级报警下限值，空值表示无下限
    * @param level5Upper     五级报警上限值，空值表示无上限
    * @param level6Lower     六级报警下限值，空值表示无下限
    * @param level6Upper     六级报警上限值，空值表示无上限
    * @param unit            单位
    */
  case class VehicleBatteryYCSetting(
                                      id: Long, //主键Id
                                      analyseGroupsID: Int, //分析组
                                      remindType: Int, //提醒方式,平台、终端、平台和终端
                                      remindInterval: Int, //提醒间隔
                                      commandContent: String, //提醒内容
                                      analysePeriod: Int, //分析周期类型
                                      periodValue: Option[String], //周期值
                                      startTime: String, //开始时间
                                      endTime: String, //结束时间
                                      createUserID: Option[Int], //创建用户
                                      createDatetime: Option[Long], //创建时间
                                      createUnitID: Option[Int], //所属单位
                                      name: Option[String], //名称
                                      var alarmMobile: Option[String], //电池报警接收手机号
                                      level1Lower: Option[Int], //一级报警下限值，空值表示无下限
                                      level1Upper: Option[Int], //一级报警上限值，空值表示无上限
                                      level2Lower: Option[Int], //二级报警下限值，空值表示无下限
                                      level2Upper: Option[Int], //二级报警上限值，空值表示无上限
                                      level3Lower: Option[Int], //三级报警下限值，空值表示无下限
                                      level3Upper: Option[Int], //三级报警上限值，空值表示无上限
                                      level4Lower: Option[Int], //四级报警下限值，空值表示无下限
                                      level4Upper: Option[Int], //四级报警上限值，空值表示无上限
                                      level5Lower: Option[Int], //五级报警下限值，空值表示无下限
                                      level5Upper: Option[Int], //五级报警上限值，空值表示无上限
                                      level6Lower: Option[Int], //六级报警下限值，空值表示无下限
                                      level6Upper: Option[Int], //六级报警上限值，空值表示无上限
                                      unit: Option[String], //单位
                                      openAlarmMobile: Int
                                    ){
    if (openAlarmMobile == 0 && alarmMobile.nonEmpty)
      alarmMobile = None
  }

  /**
    * 电压差异报警条件设置
    *
    * @param id              主键Id
    * @param analyseGroupsID 分析组
    * @param remindType      提醒方式,平台、终端、平台和终端
    * @param remindInterval  提醒间隔
    * @param commandContent  提醒内容
    * @param analysePeriod   分析周期类型
    * @param periodValue     周期值
    * @param startTime       开始时间
    * @param endTime         结束时间
    * @param createUserID    创建用户
    * @param createDatetime  创建时间
    * @param createUnitID    所属单位
    * @param name            名称
    * @param alarmMobile     电池报警接收手机号
    * @param level1Lower     一级报警下限值，空值表示无下限
    * @param level1Upper     一级报警上限值，空值表示无上限
    * @param level2Lower     二级报警下限值，空值表示无下限
    * @param level2Upper     二级报警上限值，空值表示无上限
    * @param level3Lower     三级报警下限值，空值表示无下限
    * @param level3Upper     三级报警上限值，空值表示无上限
    * @param level4Lower     四级报警下限值，空值表示无下限
    * @param level4Upper     四级报警上限值，空值表示无上限
    * @param level5Lower     五级报警下限值，空值表示无下限
    * @param level5Upper     五级报警上限值，空值表示无上限
    * @param level6Lower     六级报警下限值，空值表示无下限
    * @param level6Upper     六级报警上限值，空值表示无上限
    * @param unit            单位
    */
  case class VehicleBatteryDYCYSetting(
                                        id: Long, //主键Id
                                        analyseGroupsID: Int, //分析组
                                        remindType: Int, //提醒方式,平台、终端、平台和终端
                                        remindInterval: Int, //提醒间隔
                                        commandContent: String, //提醒内容
                                        analysePeriod: Int, //分析周期类型
                                        periodValue: Option[String], //周期值
                                        startTime: String, //开始时间
                                        endTime: String, //结束时间
                                        createUserID: Option[Int], //创建用户
                                        createDatetime: Option[Long], //创建时间
                                        createUnitID: Option[Int], //所属单位
                                        name: Option[String], //名称
                                        var alarmMobile: Option[String], //电池报警接收手机号
                                        level1Lower: Option[Int], //一级报警下限值，空值表示无下限
                                        level1Upper: Option[Int], //一级报警上限值，空值表示无上限
                                        level2Lower: Option[Int], //二级报警下限值，空值表示无下限
                                        level2Upper: Option[Int], //二级报警上限值，空值表示无上限
                                        level3Lower: Option[Int], //三级报警下限值，空值表示无下限
                                        level3Upper: Option[Int], //三级报警上限值，空值表示无上限
                                        level4Lower: Option[Int], //四级报警下限值，空值表示无下限
                                        level4Upper: Option[Int], //四级报警上限值，空值表示无上限
                                        level5Lower: Option[Int], //五级报警下限值，空值表示无下限
                                        level5Upper: Option[Int], //五级报警上限值，空值表示无上限
                                        level6Lower: Option[Int], //六级报警下限值，空值表示无下限
                                        level6Upper: Option[Int], //六级报警上限值，空值表示无上限
                                        unit: Option[String], //单位
                                        openAlarmMobile: Int
                                      ){
    if (openAlarmMobile == 0 && alarmMobile.nonEmpty)
      alarmMobile = None
  }

  /**
    * 单体过压报警设置
    *
    * @param id              主键Id
    * @param analyseGroupsID 分析组
    * @param remindType      提醒方式,平台、终端、平台和终端
    * @param remindInterval  提醒间隔
    * @param commandContent  提醒内容
    * @param analysePeriod   分析周期类型
    * @param periodValue     周期值
    * @param startTime       开始时间
    * @param endTime         结束时间
    * @param createUserID    创建用户
    * @param createDatetime  创建时间
    * @param createUnitID    所属单位
    * @param name            名称
    * @param alarmMobile     电池报警接收手机号
    * @param level1Lower     一级报警下限值，空值表示无下限
    * @param level1Upper     一级报警上限值，空值表示无上限
    * @param level2Lower     二级报警下限值，空值表示无下限
    * @param level2Upper     二级报警上限值，空值表示无上限
    * @param level3Lower     三级报警下限值，空值表示无下限
    * @param level3Upper     三级报警上限值，空值表示无上限
    * @param level4Lower     四级报警下限值，空值表示无下限
    * @param level4Upper     四级报警上限值，空值表示无上限
    * @param level5Lower     五级报警下限值，空值表示无下限
    * @param level5Upper     五级报警上限值，空值表示无上限
    * @param level6Lower     六级报警下限值，空值表示无下限
    * @param level6Upper     六级报警上限值，空值表示无上限
    * @param unit            单位
    */
  case class VehicleBatteryDTGYSetting(
                                        id: Long, //主键Id
                                        analyseGroupsID: Int, //分析组
                                        remindType: Int, //提醒方式,平台、终端、平台和终端
                                        remindInterval: Int, //提醒间隔
                                        commandContent: String, //提醒内容
                                        analysePeriod: Int, //分析周期类型
                                        periodValue: Option[String], //周期值
                                        startTime: String, //开始时间
                                        endTime: String, //结束时间
                                        createUserID: Option[Int], //创建用户
                                        createDatetime: Option[Long], //创建时间
                                        createUnitID: Option[Int], //所属单位
                                        name: Option[String], //名称
                                        var alarmMobile: Option[String], //电池报警接收手机号
                                        level1Lower: Option[Int], //一级报警下限值，空值表示无下限
                                        level1Upper: Option[Int], //一级报警上限值，空值表示无上限
                                        level2Lower: Option[Int], //二级报警下限值，空值表示无下限
                                        level2Upper: Option[Int], //二级报警上限值，空值表示无上限
                                        level3Lower: Option[Int], //三级报警下限值，空值表示无下限
                                        level3Upper: Option[Int], //三级报警上限值，空值表示无上限
                                        level4Lower: Option[Int], //四级报警下限值，空值表示无下限
                                        level4Upper: Option[Int], //四级报警上限值，空值表示无上限
                                        level5Lower: Option[Int], //五级报警下限值，空值表示无下限
                                        level5Upper: Option[Int], //五级报警上限值，空值表示无上限
                                        level6Lower: Option[Int], //六级报警下限值，空值表示无下限
                                        level6Upper: Option[Int], //六级报警上限值，空值表示无上限
                                        unit: Option[String], //单位
                                        openAlarmMobile: Int
                                      ){
    if (openAlarmMobile == 0 && alarmMobile.nonEmpty)
      alarmMobile = None
  }

  /**
    * 单体欠压报警条件设置
    *
    * @param id              主键Id
    * @param analyseGroupsID 分析组
    * @param remindType      提醒方式,平台、终端、平台和终端
    * @param remindInterval  提醒间隔
    * @param commandContent  提醒内容
    * @param analysePeriod   分析周期类型
    * @param periodValue     周期值
    * @param startTime       开始时间
    * @param endTime         结束时间
    * @param createUserID    创建用户
    * @param createDatetime  创建时间
    * @param createUnitID    所属单位
    * @param name            名称
    * @param alarmMobile     电池报警接收手机号
    * @param level1Lower     一级报警下限值，空值表示无下限
    * @param level1Upper     一级报警上限值，空值表示无上限
    * @param level2Lower     二级报警下限值，空值表示无下限
    * @param level2Upper     二级报警上限值，空值表示无上限
    * @param level3Lower     三级报警下限值，空值表示无下限
    * @param level3Upper     三级报警上限值，空值表示无上限
    * @param level4Lower     四级报警下限值，空值表示无下限
    * @param level4Upper     四级报警上限值，空值表示无上限
    * @param level5Lower     五级报警下限值，空值表示无下限
    * @param level5Upper     五级报警上限值，空值表示无上限
    * @param level6Lower     六级报警下限值，空值表示无下限
    * @param level6Upper     六级报警上限值，空值表示无上限
    * @param unit            单位
    */
  case class VehicleBatteryDTQYSetting(
                                        id: Long, //主键Id
                                        analyseGroupsID: Int, //分析组
                                        remindType: Int, //提醒方式,平台、终端、平台和终端
                                        remindInterval: Int, //提醒间隔
                                        commandContent: String, //提醒内容
                                        analysePeriod: Int, //分析周期类型
                                        periodValue: Option[String], //周期值
                                        startTime: String, //开始时间
                                        endTime: String, //结束时间
                                        createUserID: Option[Int], //创建用户
                                        createDatetime: Option[Long], //创建时间
                                        createUnitID: Option[Int], //所属单位
                                        name: Option[String], //名称
                                        var alarmMobile: Option[String], //电池报警接收手机号
                                        level1Lower: Option[Int], //一级报警下限值，空值表示无下限
                                        level1Upper: Option[Int], //一级报警上限值，空值表示无上限
                                        level2Lower: Option[Int], //二级报警下限值，空值表示无下限
                                        level2Upper: Option[Int], //二级报警上限值，空值表示无上限
                                        level3Lower: Option[Int], //三级报警下限值，空值表示无下限
                                        level3Upper: Option[Int], //三级报警上限值，空值表示无上限
                                        level4Lower: Option[Int], //四级报警下限值，空值表示无下限
                                        level4Upper: Option[Int], //四级报警上限值，空值表示无上限
                                        level5Lower: Option[Int], //五级报警下限值，空值表示无下限
                                        level5Upper: Option[Int], //五级报警上限值，空值表示无上限
                                        level6Lower: Option[Int], //六级报警下限值，空值表示无下限
                                        level6Upper: Option[Int], //六级报警上限值，空值表示无上限
                                        unit: Option[String], //单位
                                        openAlarmMobile: Int
                                      ){
    if (openAlarmMobile == 0 && alarmMobile.nonEmpty)
      alarmMobile = None
  }

  /**
    * 温差报警条件设置
    *
    * @param id              主键Id
    * @param analyseGroupsID 分析组
    * @param remindType      提醒方式,平台、终端、平台和终端
    * @param remindInterval  提醒间隔
    * @param commandContent  提醒内容
    * @param analysePeriod   分析周期类型
    * @param periodValue     周期值
    * @param startTime       开始时间
    * @param endTime         结束时间
    * @param createUserID    创建用户
    * @param createDatetime  创建时间
    * @param createUnitID    所属单位
    * @param name            名称
    * @param alarmMobile     电池报警接收手机号
    * @param level1Lower     一级报警下限值，空值表示无下限
    * @param level1Upper     一级报警上限值，空值表示无上限
    * @param level2Lower     二级报警下限值，空值表示无下限
    * @param level2Upper     二级报警上限值，空值表示无上限
    * @param level3Lower     三级报警下限值，空值表示无下限
    * @param level3Upper     三级报警上限值，空值表示无上限
    * @param level4Lower     四级报警下限值，空值表示无下限
    * @param level4Upper     四级报警上限值，空值表示无上限
    * @param level5Lower     五级报警下限值，空值表示无下限
    * @param level5Upper     五级报警上限值，空值表示无上限
    * @param level6Lower     六级报警下限值，空值表示无下限
    * @param level6Upper     六级报警上限值，空值表示无上限
    * @param unit            单位
    */
  case class VehicleBatteryWCSetting(
                                      id: Long, //主键Id
                                      analyseGroupsID: Int, //分析组
                                      remindType: Int, //提醒方式,平台、终端、平台和终端
                                      remindInterval: Int, //提醒间隔
                                      commandContent: String, //提醒内容
                                      analysePeriod: Int, //分析周期类型
                                      periodValue: Option[String], //周期值
                                      startTime: String, //开始时间
                                      endTime: String, //结束时间
                                      createUserID: Option[Int], //创建用户
                                      createDatetime: Option[Long], //创建时间
                                      createUnitID: Option[Int], //所属单位
                                      name: Option[String], //名称
                                      var alarmMobile: Option[String], //电池报警接收手机号
                                      level1Lower: Option[Int], //一级报警下限值，空值表示无下限
                                      level1Upper: Option[Int], //一级报警上限值，空值表示无上限
                                      level2Lower: Option[Int], //二级报警下限值，空值表示无下限
                                      level2Upper: Option[Int], //二级报警上限值，空值表示无上限
                                      level3Lower: Option[Int], //三级报警下限值，空值表示无下限
                                      level3Upper: Option[Int], //三级报警上限值，空值表示无上限
                                      level4Lower: Option[Int], //四级报警下限值，空值表示无下限
                                      level4Upper: Option[Int], //四级报警上限值，空值表示无上限
                                      level5Lower: Option[Int], //五级报警下限值，空值表示无下限
                                      level5Upper: Option[Int], //五级报警上限值，空值表示无上限
                                      level6Lower: Option[Int], //六级报警下限值，空值表示无下限
                                      level6Upper: Option[Int], //六级报警上限值，空值表示无上限
                                      unit: Option[String], //单位
                                      openAlarmMobile: Int
                                    ){
    if (openAlarmMobile == 0 && alarmMobile.nonEmpty)
      alarmMobile = None
  }

  /**
    * 温度过高报警条件设置
    *
    * @param id              主键Id
    * @param analyseGroupsID 分析组
    * @param remindType      提醒方式,平台、终端、平台和终端
    * @param remindInterval  提醒间隔
    * @param commandContent  提醒内容
    * @param analysePeriod   分析周期类型
    * @param periodValue     周期值
    * @param startTime       开始时间
    * @param endTime         结束时间
    * @param createUserID    创建用户
    * @param createDatetime  创建时间
    * @param createUnitID    所属单位
    * @param name            名称
    * @param alarmMobile     电池报警接收手机号
    * @param level1Lower     一级报警下限值，空值表示无下限
    * @param level1Upper     一级报警上限值，空值表示无上限
    * @param level2Lower     二级报警下限值，空值表示无下限
    * @param level2Upper     二级报警上限值，空值表示无上限
    * @param level3Lower     三级报警下限值，空值表示无下限
    * @param level3Upper     三级报警上限值，空值表示无上限
    * @param level4Lower     四级报警下限值，空值表示无下限
    * @param level4Upper     四级报警上限值，空值表示无上限
    * @param level5Lower     五级报警下限值，空值表示无下限
    * @param level5Upper     五级报警上限值，空值表示无上限
    * @param level6Lower     六级报警下限值，空值表示无下限
    * @param level6Upper     六级报警上限值，空值表示无上限
    * @param unit            单位
    */
  case class VehicleBatteryWDGGSetting(
                                        id: Long, //主键Id
                                        analyseGroupsID: Int, //分析组
                                        remindType: Int, //提醒方式,平台、终端、平台和终端
                                        remindInterval: Int, //提醒间隔
                                        commandContent: String, //提醒内容
                                        analysePeriod: Int, //分析周期类型
                                        periodValue: Option[String], //周期值
                                        startTime: String, //开始时间
                                        endTime: String, //结束时间
                                        createUserID: Option[Int], //创建用户
                                        createDatetime: Option[Long], //创建时间
                                        createUnitID: Option[Int], //所属单位
                                        name: Option[String], //名称
                                        var alarmMobile: Option[String], //电池报警接收手机号
                                        level1Lower: Option[Int], //一级报警下限值，空值表示无下限
                                        level1Upper: Option[Int], //一级报警上限值，空值表示无上限
                                        level2Lower: Option[Int], //二级报警下限值，空值表示无下限
                                        level2Upper: Option[Int], //二级报警上限值，空值表示无上限
                                        level3Lower: Option[Int], //三级报警下限值，空值表示无下限
                                        level3Upper: Option[Int], //三级报警上限值，空值表示无上限
                                        level4Lower: Option[Int], //四级报警下限值，空值表示无下限
                                        level4Upper: Option[Int], //四级报警上限值，空值表示无上限
                                        level5Lower: Option[Int], //五级报警下限值，空值表示无下限
                                        level5Upper: Option[Int], //五级报警上限值，空值表示无上限
                                        level6Lower: Option[Int], //六级报警下限值，空值表示无下限
                                        level6Upper: Option[Int], //六级报警上限值，空值表示无上限
                                        unit: Option[String], //单位
                                        openAlarmMobile: Int
                                      ){
    if (openAlarmMobile == 0 && alarmMobile.nonEmpty)
      alarmMobile = None
  }

  /**
    * 温感线异常报警设置
    *
    * @param id              主键Id
    * @param analyseGroupsID 分析组
    * @param remindType      提醒方式,平台、终端、平台和终端
    * @param remindInterval  提醒间隔
    * @param commandContent  提醒内容
    * @param analysePeriod   分析周期类型
    * @param periodValue     周期值
    * @param startTime       开始时间
    * @param endTime         结束时间
    * @param createUserID    创建用户
    * @param createDatetime  创建时间
    * @param createUnitID    所属单位
    * @param name            名称
    * @param alarmMobile     电池报警接收手机号
    * @param level1Lower     一级报警下限值，空值表示无下限
    * @param level1Upper     一级报警上限值，空值表示无上限
    * @param level2Lower     二级报警下限值，空值表示无下限
    * @param level2Upper     二级报警上限值，空值表示无上限
    * @param level3Lower     三级报警下限值，空值表示无下限
    * @param level3Upper     三级报警上限值，空值表示无上限
    * @param level4Lower     四级报警下限值，空值表示无下限
    * @param level4Upper     四级报警上限值，空值表示无上限
    * @param level5Lower     五级报警下限值，空值表示无下限
    * @param level5Upper     五级报警上限值，空值表示无上限
    * @param level6Lower     六级报警下限值，空值表示无下限
    * @param level6Upper     六级报警上限值，空值表示无上限
    * @param unit            单位
    */
  case class VehicleBatteryWGXYCSetting(
                                         id: Long, //主键Id
                                         analyseGroupsID: Int, //分析组
                                         remindType: Int, //提醒方式,平台、终端、平台和终端
                                         remindInterval: Int, //提醒间隔
                                         commandContent: String, //提醒内容
                                         analysePeriod: Int, //分析周期类型
                                         periodValue: Option[String], //周期值
                                         startTime: String, //开始时间
                                         endTime: String, //结束时间
                                         createUserID: Option[Int], //创建用户
                                         createDatetime: Option[Long], //创建时间
                                         createUnitID: Option[Int], //所属单位
                                         name: Option[String], //名称
                                         var alarmMobile: Option[String], //电池报警接收手机号
                                         level1Lower: Option[Int], //一级报警下限值，空值表示无下限
                                         level1Upper: Option[Int], //一级报警上限值，空值表示无上限
                                         level2Lower: Option[Int], //二级报警下限值，空值表示无下限
                                         level2Upper: Option[Int], //二级报警上限值，空值表示无上限
                                         level3Lower: Option[Int], //三级报警下限值，空值表示无下限
                                         level3Upper: Option[Int], //三级报警上限值，空值表示无上限
                                         level4Lower: Option[Int], //四级报警下限值，空值表示无下限
                                         level4Upper: Option[Int], //四级报警上限值，空值表示无上限
                                         level5Lower: Option[Int], //五级报警下限值，空值表示无下限
                                         level5Upper: Option[Int], //五级报警上限值，空值表示无上限
                                         level6Lower: Option[Int], //六级报警下限值，空值表示无下限
                                         level6Upper: Option[Int], //六级报警上限值，空值表示无上限
                                         unit: Option[String], //单位
                                         openAlarmMobile: Int
                                       ){
    if (openAlarmMobile == 0 && alarmMobile.nonEmpty)
      alarmMobile = None
  }

  /**
    * 绝缘过低报警设置
    *
    * @param id              主键Id
    * @param analyseGroupsID 分析组
    * @param remindType      提醒方式,平台、终端、平台和终端
    * @param remindInterval  提醒间隔
    * @param commandContent  提醒内容
    * @param analysePeriod   分析周期类型
    * @param periodValue     周期值
    * @param startTime       开始时间
    * @param endTime         结束时间
    * @param createUserID    创建用户
    * @param createDatetime  创建时间
    * @param createUnitID    所属单位
    * @param name            名称
    * @param alarmMobile     电池报警接收手机号
    * @param level1Lower     一级报警下限值，空值表示无下限
    * @param level1Upper     一级报警上限值，空值表示无上限
    * @param level2Lower     二级报警下限值，空值表示无下限
    * @param level2Upper     二级报警上限值，空值表示无上限
    * @param level3Lower     三级报警下限值，空值表示无下限
    * @param level3Upper     三级报警上限值，空值表示无上限
    * @param level4Lower     四级报警下限值，空值表示无下限
    * @param level4Upper     四级报警上限值，空值表示无上限
    * @param level5Lower     五级报警下限值，空值表示无下限
    * @param level5Upper     五级报警上限值，空值表示无上限
    * @param level6Lower     六级报警下限值，空值表示无下限
    * @param level6Upper     六级报警上限值，空值表示无上限
    * @param unit            单位
    */
  case class VehicleBatteryJYGDSetting(
                                        id: Long, //主键Id
                                        analyseGroupsID: Int, //分析组
                                        remindType: Int, //提醒方式,平台、终端、平台和终端
                                        remindInterval: Int, //提醒间隔
                                        commandContent: String, //提醒内容
                                        analysePeriod: Int, //分析周期类型
                                        periodValue: Option[String], //周期值
                                        startTime: String, //开始时间
                                        endTime: String, //结束时间
                                        createUserID: Option[Int], //创建用户
                                        createDatetime: Option[Long], //创建时间
                                        createUnitID: Option[Int], //所属单位
                                        name: Option[String], //名称
                                        var alarmMobile: Option[String], //电池报警接收手机号
                                        level1Lower: Option[Int], //一级报警下限值，空值表示无下限
                                        level1Upper: Option[Int], //一级报警上限值，空值表示无上限
                                        level2Lower: Option[Int], //二级报警下限值，空值表示无下限
                                        level2Upper: Option[Int], //二级报警上限值，空值表示无上限
                                        level3Lower: Option[Int], //三级报警下限值，空值表示无下限
                                        level3Upper: Option[Int], //三级报警上限值，空值表示无上限
                                        level4Lower: Option[Int], //四级报警下限值，空值表示无下限
                                        level4Upper: Option[Int], //四级报警上限值，空值表示无上限
                                        level5Lower: Option[Int], //五级报警下限值，空值表示无下限
                                        level5Upper: Option[Int], //五级报警上限值，空值表示无上限
                                        level6Lower: Option[Int], //六级报警下限值，空值表示无下限
                                        level6Upper: Option[Int], //六级报警上限值，空值表示无上限
                                        unit: Option[String], //单位
                                        openAlarmMobile: Int
                                      ){
    if (openAlarmMobile == 0 && alarmMobile.nonEmpty)
      alarmMobile = None
  }

  /**
    * 充高放低报警设置
    *
    * @param id              主键Id
    * @param analyseGroupsID 分析组
    * @param remindType      提醒方式,平台、终端、平台和终端
    * @param remindInterval  提醒间隔
    * @param commandContent  提醒内容
    * @param analysePeriod   分析周期类型
    * @param periodValue     周期值
    * @param startTime       开始时间
    * @param endTime         结束时间
    * @param createUserID    创建用户
    * @param createDatetime  创建时间
    * @param createUnitID    所属单位
    * @param name            名称
    * @param alarmMobile     电池报警接收手机号
    * @param level1Lower     一级报警下限值，空值表示无下限
    * @param level1Upper     一级报警上限值，空值表示无上限
    * @param level2Lower     二级报警下限值，空值表示无下限
    * @param level2Upper     二级报警上限值，空值表示无上限
    * @param level3Lower     三级报警下限值，空值表示无下限
    * @param level3Upper     三级报警上限值，空值表示无上限
    * @param level4Lower     四级报警下限值，空值表示无下限
    * @param level4Upper     四级报警上限值，空值表示无上限
    * @param level5Lower     五级报警下限值，空值表示无下限
    * @param level5Upper     五级报警上限值，空值表示无上限
    * @param level6Lower     六级报警下限值，空值表示无下限
    * @param level6Upper     六级报警上限值，空值表示无上限
    * @param unit            单位
    */
  case class VehicleBatteryCGFDSetting(
                                        id: Long, //主键Id
                                        analyseGroupsID: Int, //分析组
                                        remindType: Int, //提醒方式,平台、终端、平台和终端
                                        remindInterval: Int, //提醒间隔
                                        commandContent: String, //提醒内容
                                        analysePeriod: Int, //分析周期类型
                                        periodValue: Option[String], //周期值
                                        startTime: String, //开始时间
                                        endTime: String, //结束时间
                                        createUserID: Option[Int], //创建用户
                                        createDatetime: Option[Long], //创建时间
                                        createUnitID: Option[Int], //所属单位
                                        name: Option[String], //名称
                                        var alarmMobile: Option[String], //电池报警接收手机号
                                        level1Lower: Option[Int], //一级报警下限值，空值表示无下限
                                        level1Upper: Option[Int], //一级报警上限值，空值表示无上限
                                        level2Lower: Option[Int], //二级报警下限值，空值表示无下限
                                        level2Upper: Option[Int], //二级报警上限值，空值表示无上限
                                        level3Lower: Option[Int], //三级报警下限值，空值表示无下限
                                        level3Upper: Option[Int], //三级报警上限值，空值表示无上限
                                        level4Lower: Option[Int], //四级报警下限值，空值表示无下限
                                        level4Upper: Option[Int], //四级报警上限值，空值表示无上限
                                        level5Lower: Option[Int], //五级报警下限值，空值表示无下限
                                        level5Upper: Option[Int], //五级报警上限值，空值表示无上限
                                        level6Lower: Option[Int], //六级报警下限值，空值表示无下限
                                        level6Upper: Option[Int], //六级报警上限值，空值表示无上限
                                        unit: Option[String], //单位
                                        openAlarmMobile: Int
                                      ){
    if (openAlarmMobile == 0 && alarmMobile.nonEmpty)
      alarmMobile = None
  }

  /**
    * SOC过低报警设置
    *
    * @param id              主键Id
    * @param analyseGroupsID 分析组
    * @param remindType      提醒方式,平台、终端、平台和终端
    * @param remindInterval  提醒间隔
    * @param commandContent  提醒内容
    * @param analysePeriod   分析周期类型
    * @param periodValue     周期值
    * @param startTime       开始时间
    * @param endTime         结束时间
    * @param createUserID    创建用户
    * @param createDatetime  创建时间
    * @param createUnitID    所属单位
    * @param name            名称
    * @param alarmMobile     电池报警接收手机号
    * @param level1Lower     一级报警下限值，空值表示无下限
    * @param level1Upper     一级报警上限值，空值表示无上限
    * @param level2Lower     二级报警下限值，空值表示无下限
    * @param level2Upper     二级报警上限值，空值表示无上限
    * @param level3Lower     三级报警下限值，空值表示无下限
    * @param level3Upper     三级报警上限值，空值表示无上限
    * @param level4Lower     四级报警下限值，空值表示无下限
    * @param level4Upper     四级报警上限值，空值表示无上限
    * @param level5Lower     五级报警下限值，空值表示无下限
    * @param level5Upper     五级报警上限值，空值表示无上限
    * @param level6Lower     六级报警下限值，空值表示无下限
    * @param level6Upper     六级报警上限值，空值表示无上限
    * @param unit            单位
    */
  case class VehicleBatterySOCSetting(
                                       id: Long, //主键Id
                                       analyseGroupsID: Int, //分析组
                                       remindType: Int, //提醒方式,平台、终端、平台和终端
                                       remindInterval: Int, //提醒间隔
                                       commandContent: String, //提醒内容
                                       analysePeriod: Int, //分析周期类型
                                       periodValue: Option[String], //周期值
                                       startTime: String, //开始时间
                                       endTime: String, //结束时间
                                       createUserID: Option[Int], //创建用户
                                       createDatetime: Option[Long], //创建时间
                                       createUnitID: Option[Int], //所属单位
                                       name: Option[String], //名称
                                       var alarmMobile: Option[String], //电池报警接收手机号
                                       level1Lower: Option[Int], //一级报警下限值，空值表示无下限
                                       level1Upper: Option[Int], //一级报警上限值，空值表示无上限
                                       level2Lower: Option[Int], //二级报警下限值，空值表示无下限
                                       level2Upper: Option[Int], //二级报警上限值，空值表示无上限
                                       level3Lower: Option[Int], //三级报警下限值，空值表示无下限
                                       level3Upper: Option[Int], //三级报警上限值，空值表示无上限
                                       level4Lower: Option[Int], //四级报警下限值，空值表示无下限
                                       level4Upper: Option[Int], //四级报警上限值，空值表示无上限
                                       level5Lower: Option[Int], //五级报警下限值，空值表示无下限
                                       level5Upper: Option[Int], //五级报警上限值，空值表示无上限
                                       level6Lower: Option[Int], //六级报警下限值，空值表示无下限
                                       level6Upper: Option[Int], //六级报警上限值，空值表示无上限
                                       unit: Option[String], //单位
                                       openAlarmMobile: Int
                                     ){
    if (openAlarmMobile == 0 && alarmMobile.nonEmpty)
      alarmMobile = None
  }

  /**
    * 离线报警设置
    *
    * @param id              主键Id
    * @param name            名称
    * @param analyseGroupsID 车辆分析组
    * @param remindType      提醒方式
    * @param remindInterval  提醒间隔
    * @param commandContent  提醒内容
    * @param analysePeriod   分析周期
    * @param periodValue     周期值
    * @param startTime       分析开始时间
    * @param endTime         分析结束时间
    * @param timeThreshold   离线时间阀值
    * @param alarmMobile     报警接收手机号
    * @param createUserID    创建用户
    * @param createDatetime  创建时间
    * @param createUnitID    创建单位
    */
  case class VehicleOfflineSetting(
                                    id: Long, //主键Id
                                    name: Option[String], //名称
                                    analyseGroupsID: Long, //车辆分析组
                                    remindType: Int, //提醒方式
                                    remindInterval: Int, //提醒间隔
                                    commandContent: String, //提醒内容
                                    analysePeriod: Int, //分析周期
                                    periodValue: Option[String], //周期值
                                    startTime: String, //分析开始时间
                                    endTime: String, //分析结束时间
                                    timeThreshold: Int, //离线时间阀值
                                    alarmMobile: Option[String], //报警接收手机号
                                    createUserID: Option[Long], //创建用户
                                    createDatetime: Option[Long], //创建时间
                                    createUnitID: Option[Long] //创建单位
                                  )

  /**
    * 疲劳驾驶分析设置
    *
    * @param id                    主键Id
    * @param name                  名称
    * @param analyseGroupsID       分析组ID
    * @param remindType            提醒方式，2：平台报警；3：TTS语音报警;；4：平台/TTS语音报警
    * @param remindInterval        提醒间隔
    * @param commandContent        提醒内容
    * @param analysePeriod         分析周期
    * @param periodValue           周期值
    * @param startTime             开始时间
    * @param endTime               结束时间
    * @param continuousRestTime    连续休息时长
    * @param totalRestTime         累计休息时长
    * @param effectiveRestTime     最小有效休息时长
    * @param timeThreshold         疲劳驾驶时间大于(白天)
    * @param earlyWarningThreshold 预疲劳提前量
    * @param minDistance           最小行驶距离大于
    * @param nightTimeThreshold    疲劳驾驶时间大于(夜间)
    * @param nightDriveBeginTime   夜间开始时段
    * @param nightDriveendTime     夜间结束时段
    * @param dayTiredTime          24小时驾驶时长大于
    * @param alarmMobile           报警接收手机号
    * @param createUserID          创建人
    * @param createDatetime        创建时间
    * @param createUnitID          创建单位
    */
  case class VehicleTiredSetting(
                                  id: Long, //主键Id
                                  name: Option[String], //名称
                                  analyseGroupsID: Long, //分析组ID
                                  remindType: Int, //提醒方式，2：平台报警；3：TTS语音报警;；4：平台/TTS语音报警
                                  remindInterval: Int, //提醒间隔
                                  commandContent: String, //提醒内容
                                  analysePeriod: Int, //分析周期
                                  periodValue: Option[String], //周期值
                                  startTime: String, //开始时间
                                  endTime: String, //结束时间
                                  continuousRestTime: Int, //连续休息时长
                                  totalRestTime: Int, //累计休息时长
                                  effectiveRestTime: Int, //最小有效休息时长
                                  timeThreshold: Int, //疲劳驾驶时间大于(白天)
                                  earlyWarningThreshold: Int, //预疲劳提前量
                                  minDistance: Int, //最小行驶距离大于
                                  nightTimeThreshold: Option[Int], //疲劳驾驶时间大于(夜间)
                                  nightDriveBeginTime: Option[String], //夜间开始时段
                                  nightDriveendTime: Option[String], //夜间结束时段
                                  dayTiredTime: Option[Int], //24小时驾驶时长大于
                                  var alarmMobile: Option[String], //报警接收手机号
                                  createUserID: Option[Long], //创建人
                                  createDatetime: Option[Long], //创建时间
                                  createUnitID: Option[Long], //创建单位
                                  openAlarmMobile: Int
                                ) {
    if (openAlarmMobile == 0 && alarmMobile.nonEmpty)
      alarmMobile = None
  }

  /**
    * 进出区域分析设置
    *
    * @param id              主键Id
    * @param name            名称
    * @param analyseGroupsID 分析组ID
    * @param remindType      提醒方式，2：平台报警；3：TTS语音报警;；4：平台/TTS语音报警
    * @param remindInterval  提醒间隔
    * @param commandContent  提醒内容
    * @param analysePeriod   分析周期
    * @param periodValue     周期值
    * @param startTime       分析开始时间,格式如:8:00:00
    * @param endTime         分析结束时间，格式如：23:00:00
    * @param coverageArea    分析区域
    * @param timeThreshold   时间阀值
    * @param alarmType       报警类型(默认为:0),0:进出区域都报警,1:进入区域时报警,2:驶出区域时报警
    * @param alarmMobile     报警接收手机号
    * @param createUserID    创建人
    * @param createDatetime  创建时间
    * @param createUnitID    创建单位ID
    */
  case class VehicleInOutAreaSetting(
                                      id: Long, //主键Id
                                      name: Option[String], //名称
                                      analyseGroupsID: Long, //分析组ID
                                      remindType: Int, //提醒方式，2：平台报警；3：TTS语音报警;；4：平台/TTS语音报警
                                      remindInterval: Int, //提醒间隔
                                      commandContent: String, //提醒内容
                                      analysePeriod: Int, //分析周期
                                      periodValue: Option[String], //周期值
                                      startTime: String, //分析开始时间,格式如:8:00:00
                                      endTime: String, //分析结束时间，格式如：23:00:00
                                      coverageArea: Option[CustomArea], //分析区域
                                      timeThreshold: Int, //时间阀值
                                      alarmType: Int, //报警类型(默认为:0),0:进出区域都报警,1:进入区域时报警,2:驶出区域时报警
                                      var alarmMobile: Option[String], //报警接收手机号
                                      createUserID: Option[Long], //创建人
                                      createDatetime: Option[Long], //创建时间
                                      createUnitID: Option[Long], //创建单位ID
                                      openAlarmMobile: Int //是否发送短信
                                    ){
    if (openAlarmMobile == 0 && alarmMobile.nonEmpty)
      alarmMobile = None
  }

  /**
    * 进出地点分析设置
    *
    * @param id              主键Id
    * @param name            名称
    * @param analyseGroupsID 分组组ID
    * @param remindType      提醒方式，2：平台报警；3：TTS语音报警;；4：平台/TTS语音报警
    * @param commandContent  提醒内容
    * @param analysePeriod   分析周期
    * @param periodValue     周期值
    * @param startTime       开始时间
    * @param endTime         结束时间
    * @param coveragePoint   分析地点
    * @param coverageRange   地点范围
    * @param timeThreshold   地点时间阀值
    * @param remindInterval  提醒间隔
    * @param alarmType       报警类型(默认为:0),0:进出地点都报警,1:进入地点时报警,2:驶出地点时报警
    * @param createUserID    创建人
    * @param createDatetime  创建时间
    * @param createUnitID    创建单位
    */
  case class VehicleInOutLocaleSetting(
                                        id: Long, //主键Id
                                        name: Option[String], //名称
                                        analyseGroupsID: Long, //分组组ID
                                        remindType: Int, //提醒方式，2：平台报警；3：TTS语音报警;；4：平台/TTS语音报警
                                        commandContent: String, //提醒内容
                                        analysePeriod: Int, //分析周期
                                        periodValue: Option[String], //周期值
                                        startTime: String, //开始时间
                                        endTime: String, //结束时间
                                        coveragePoint: Option[CustomPoint], //分析地点
                                        coverageRange: Int, //地点范围
                                        timeThreshold: Int, //地点时间阀值
                                        remindInterval: Option[Int], //提醒间隔
                                        alarmType: Int, //报警类型(默认为:0),0:进出地点都报警,1:进入地点时报警,2:驶出地点时报警
                                        createUserID: Option[Long], //创建人
                                        createDatetime: Option[Long], //创建时间
                                        createUnitID: Option[Long], //创建单位
                                        var alarmMobile: Option[String], //报警接收手机号
                                        openAlarmMobile: Int //是否发送短信
                                      ){
    if (openAlarmMobile == 0 && alarmMobile.nonEmpty)
      alarmMobile = None
  }

  /**
    * 道路偏移设置
    *
    * @param id                主键Id
    * @param name              名称
    * @param analyseGroupsID   车辆分析组
    * @param remindType        提醒方式
    * @param remindInterval    提醒间隔
    * @param commandContent    提醒内容
    * @param analysePeriod     分析周期
    * @param periodValue       周期值
    * @param startTime         分析开始时间
    * @param endTime           分析结束时间
    * @param validDistance     有效距离
    * @param allowLeaveMaxTime 允许最大的偏离时间
    * @param coverageLine      分析路线
    * @param alarmType         报警类型
    * @param createUserID      创建用户
    * @param createDatetime    创建时间
    * @param createUnitID      创建单位
    */
  case class VehicleRoadSetting(
                                 id: Long, //主键Id
                                 name: Option[String], //名称
                                 analyseGroupsID: Long, //车辆分析组
                                 remindType: Int, //提醒方式
                                 remindInterval: Int, //提醒间隔
                                 commandContent: String, //提醒内容
                                 analysePeriod: Int, //分析周期
                                 periodValue: Option[String], //周期值
                                 startTime: String, //分析开始时间
                                 endTime: String, //分析结束时间
                                 validDistance: Option[Int], //有效距离
                                 allowLeaveMaxTime: Option[Int], //允许最大的偏离时间
                                 //coverageGroupsID:Int, //分析路线
                                 coverageLine: Option[CustomLine], //分析路线
                                 alarmType: Option[Int], //报警类型
                                 //alarmMobile:Option[String], //报警接收手机号
                                 createUserID: Option[Long], //创建用户
                                 createDatetime: Option[Long], //创建时间
                                 createUnitID: Option[Long] //创建单位
                               )

  /**
    * 自定义区域信息
    *
    * @param id           主键Id
    * @param customcode   自定义编码
    * @param name         区域名称
    * @param maplayerid   自定义区域类型，1：工厂；2：收费站；3：仓库；4：码头,堆场；5：物流园；6：其他；7：跟踪点；8：网点
    * @param drawingType  类型，circle-圆；rect-矩形；polygon-多边形
    * @param lon          经度
    * @param lat          纬度
    * @param lonlat       矩形和多边形中各个点的经纬度，格式为：经度|纬度,经度|纬度。点也点之前用逗号隔开
    * @param originlnglat 和lonlat一样的
    * @param mapiconid    图层编号
    * @param maptype      地图类型，1：百度
    * @param workunitid   机构ID
    * @param address      地址
    * @param namecolor    名称显示颜色
    * @param area         面积(平方米)
    * @param areacolor    面积颜色
    * @param radius       半径(米)
    * @param remark       备注
    */
  case class CustomArea(
                         id: Long, //主键Id
                         customcode: Option[String], //自定义编码
                         name: Option[String], //区域名称
                         maplayerid: Option[Int], //自定义区域类型，1：工厂；2：收费站；3：仓库；4：码头,堆场；5：物流园；6：其他；7：跟踪点；8：网点
                         drawingType: Option[String], //类型，circle-圆；rect-矩形；polygon-多边形
                         lon: Option[String], //经度
                         lat: Option[String], //纬度
                         lonlat: Option[String], //矩形和多边形中各个点的经纬度，格式为：经度|纬度,经度|纬度。点也点之前用逗号隔开
                         originlnglat: Option[String], //和lonlat一样的
                         mapiconid: Option[Int], //图层编号
                         maptype: Option[Int], //地图类型，1：百度
                         workunitid: Option[Int], //机构ID
                         address: Option[String], //地址
                         namecolor: Option[String], //名称显示颜色
                         area: Option[String], //面积(平方米)
                         areacolor: Option[String], //面积颜色
                         radius: Option[Float], //半径(米)
                         remark: Option[String] //备注
                       )

  /**
    * 自定义点信息
    *
    * @param id              主键Id
    * @param customcode      自定义编码
    * @param name            名称
    * @param maplayerid      自定义类型，1：工厂；2：收费站；3：仓库；4：码头,堆场；5：物流园；6：其他；7：跟踪点；8：网点
    * @param lon             经度
    * @param lat             纬度
    * @param originlongitude 原始经度
    * @param originlatitude  原始纬度
    * @param mapiconid       图标
    * @param maptype         地图类型，1：百度
    * @param workunitid      机构ID
    * @param address         地址
    * @param namecolor       名称显示颜色
    * @param area            面积
    * @param areacolor       面积颜色
    * @param radius          半径
    * @param remark          备注
    */
  case class CustomPoint(
                          id: Long, //主键Id
                          customcode: Option[String], //自定义编码
                          name: String, //名称
                          maplayerid: Option[Int], //自定义类型，1：工厂；2：收费站；3：仓库；4：码头,堆场；5：物流园；6：其他；7：跟踪点；8：网点
                          lon: Option[String], //经度
                          lat: Option[String], //纬度
                          originlongitude: Option[String], //原始经度
                          originlatitude: Option[String], //原始纬度
                          mapiconid: Option[String], //图标
                          maptype: Option[Int], //地图类型，1：百度
                          workunitid: Option[Int], //机构ID
                          address: Option[String], //地址
                          namecolor: Option[String], //名称显示颜色
                          area: Option[String], //面积
                          areacolor: Option[String], //面积颜色
                          radius: Option[String], //半径
                          remark: Option[String] //备注
                        )

  /**
    * 自定义线路信息
    *
    * @param id           主键Id
    * @param name         名称
    * @param nameColor    名称颜色
    * @param customCode   自定义编码
    * @param workUnitID   机构ID
    * @param customType   自定义类型
    * @param strokeColor  线路颜色
    * @param strokeWeight 线路宽度
    * @param areaColor    区域颜色
    * @param qdlongitude  线路起点经度
    * @param qdlatitude   线路起点纬度
    * @param zdlongitude  线路终点经度
    * @param zdlatitude   线路终点纬度
    * @param imgUrl       图片地址
    * @param zoom         地图等级
    * @param shortName    名称缩写
    * @param startPoint   开始位置
    * @param endPoint     终点位置
    * @param mileage      总里程
    * @param remark       备注
    */
  case class CustomLine(
                         id: Long, //主键Id
                         name: String, //名称
                         nameColor: Option[String], //名称颜色
                         customCode: Option[String], //自定义编码
                         workUnitID: Option[Int], //机构ID
                         customType: Option[Int], //自定义类型
                         strokeColor: Option[String], //线路颜色
                         strokeWeight: Option[Int], //线路宽度
                         areaColor: Option[String], //区域颜色
                         qdlongitude: Option[String], //线路起点经度
                         qdlatitude: Option[String], //线路起点纬度
                         zdlongitude: Option[String], //线路终点经度
                         zdlatitude: Option[String], //线路终点纬度
                         imgUrl: Option[String], //图片地址
                         zoom: Option[Int], //地图等级
                         shortName: Option[String], //名称缩写
                         startPoint: Option[String], //开始位置
                         endPoint: Option[String], //终点位置
                         mileage: Option[String], //总里程
                         remark: Option[String] //备注
                       )

  /**
    * 自定义线路、点对照信息
    *
    * @param id              主键Id
    * @param lineId          线路ID
    * @param longitude       经度
    * @param latitude        纬度
    * @param originlongitude 原始经度
    * @param originlatitude  原始纬度
    * @param flag            标志
    * @param zoom            地图等级
    */
  case class CustomLinePoint(
                              id: Long, //主键Id
                              lineId: Option[Long], //线路ID
                              longitude: Option[String], //经度
                              latitude: Option[String], //纬度
                              originlongitude: Option[String], //原始经度
                              originlatitude: Option[String], //原始纬度
                              flag: Option[Int], //标志
                              zoom: Option[Int] //地图等级
                            )

  /**
    * 终端设备报警消息类。
    *
    * @param device_type  (必填)设备类型。
    * @param device_id    (必填)设备ID。格式由对应类型设备自行定义, 设备类型和设备ID组成设备的全局唯一标识。
    * @param alarm_type   (必填)报警类型。与报警类型字典表的数据一致，报警类型的范围决定对应的报警派生类的类型。
    * @param alarm_source (必填)报警来源。根据类型ID范围填写。
    * @param alarm_cnt    (必填)持续报警的次数。
    * @param alarm_time   (必填)本次报警的时间。UTC毫秒时间戳。
    * @param alarm_start  (可选)报警的开始时间。UTC毫秒时间戳。
    * @param alarm_stop   (可选)报警的结束时间。UTC毫秒时间戳。如果非null，则表示报警结束事件。
    * @param alarm_level  (可选)报警级别。0：无故障，1：轻微故障，2：次级故障，3：严重故障，其他：自定义，null：未指定。
    * @param alarm_data   (必填)报警相关数据，Json格式。
    * @param latitude     (可选)纬度数据。ddd.ddddd格式，负数：南纬，正数：北纬。
    * @param longitude    (可选)经度数据。ddd.ddddd格式，负数：东经，正数：西经。
    * @param height       (可选)海拔高度。单位：米。
    * @param speed        (可选)地面速率。单位：米/秒。
    * @param direction    (可选)地面航向角度。单位：度，0-360°。
    */
  case class BaseAlarm(
                        device_type: Int,
                        device_id: String,
                        alarm_type: Int,
                        alarm_source: Int,
                        alarm_cnt: Int,
                        alarm_time: Date,
                        alarm_start: Option[Date] = None,
                        alarm_stop: Option[Date] = None,
                        @DeserValueInt alarm_level: Option[Int] = None,
                        alarm_data: String, //Json格式
                        @DeserValueDouble latitude: Option[Double] = None,
                        @DeserValueDouble longitude: Option[Double] = None,
                        @DeserValueInt height: Option[Int] = None,
                        @DeserValueInt speed: Option[Int] = None,
                        @DeserValueInt direction: Option[Int] = None)

}